import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
// idea 中默认一个程序只能启动一个，启动多个客户端可配置一下。
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lishuo
 * Date: 2023-05-25
 * Time: 22:21
 */
public class TcpEchoClient {
    private Socket socket = null;

    // ***只有这里会建立连接，和 Udp 不同***
    public TcpEchoClient(String severIp, int port) throws IOException {
        // 这个操作就相当于让客户端和服务器建立 TCP 连接
        // 这里的链接连上了，accept 就会返回
        socket = new Socket(severIp,port);
    }

    public void start() {
        Scanner scanner = new Scanner(System.in);
        try (InputStream inputStream = socket.getInputStream();
             OutputStream outputStream = socket.getOutputStream()) {
            // 将字节流包装成字符流
            Scanner scannerFromSocket = new Scanner(inputStream);
            PrintWriter printWriter = new PrintWriter(outputStream);
            while (true) {
                // 1.从键盘上读取用户输入的内容
                System.out.print("->");
                String request = scanner.next();
                // 2.把读取的内容构成请求，发给服务器
                //   注意：这里的发送，是指代换行的！
                printWriter.println(request);
                // 写网卡为全缓冲，这里使用flush刷新
                printWriter.flush();
                // 3.从服务器读取响应内容
                String response = scannerFromSocket.next();
                // 4. 把响应的结果显示到控制台上
                System.out.printf("req: %s ; resq: %s\n",request,response);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        TcpEchoClient tcpEchoClient = new TcpEchoClient("127.0.0.1",9090);
        tcpEchoClient.start();
    }

}
